gdk: Make get_shape and get_input_shape vfuncs
authorBenjamin Otte <otte@redhat.com>
Thu, 25 Nov 2010 11:17:11 +0000 (12:17 +0100)
committerBenjamin Otte <otte@redhat.com>
Thu, 2 Dec 2010 19:21:04 +0000 (20:21 +0100)
Trying to get rid of all the _gdk_windowing_something() functions that
we expect backends to magically know about and instead put them in a
proper interface (mostly GdkWindowImplClass).

gdk/gdkinternals.h
gdk/gdkwindow.c
gdk/gdkwindowimpl.h
gdk/quartz/gdkwindow-quartz.c
gdk/win32/gdkwindow-win32.c
gdk/x11/gdkwindow-x11.c

index 7da2d838215960bb4c6b0adb7b4a3d7042c1b100..830e5d7a0384bcf64217116b36fdfcefcef6fe13 100644 (file)
@@ -356,8 +356,6 @@ gulong   _gdk_windowing_window_get_next_serial  (GdkDisplay *display);
 void     _gdk_windowing_window_get_offsets      (GdkWindow  *window,
                                                 gint       *x_offset,
                                                 gint       *y_offset);
-cairo_region_t *_gdk_windowing_window_get_shape      (GdkWindow  *window);
-cairo_region_t *_gdk_windowing_window_get_input_shape(GdkWindow  *window);
 void     _gdk_windowing_window_beep             (GdkWindow *window);
 
 
index ac46daa677a1b3a622f17fd5b74acf49216e54c5..9e84e2a2808b6d41c02a0cfa0b819561e18434c0 100644 (file)
@@ -718,7 +718,7 @@ remove_child_area (GdkWindow *private,
        }
       else if (private->window_type == GDK_WINDOW_FOREIGN)
        {
-         shape = _gdk_windowing_window_get_shape ((GdkWindow *)child);
+         shape = GDK_WINDOW_IMPL_GET_CLASS (child)->get_shape (child);
          if (shape)
            {
              cairo_region_intersect (child_region, shape);
@@ -732,7 +732,7 @@ remove_child_area (GdkWindow *private,
            cairo_region_intersect (child_region, child->input_shape);
          else if (private->window_type == GDK_WINDOW_FOREIGN)
            {
-             shape = _gdk_windowing_window_get_input_shape ((GdkWindow *)child);
+             shape = GDK_WINDOW_IMPL_GET_CLASS (child)->get_input_shape (child);
              if (shape)
                {
                  cairo_region_intersect (child_region, shape);
index 6f246ffc88b1b9cb0f397a1a278647d0755e8404..dfcf3b4dc713c68220866cf7efe5e6c5891d202d 100644 (file)
@@ -104,6 +104,8 @@ struct _GdkWindowImplClass
                                          gint            *y,
                                          GdkModifierType *mask);
 
+  cairo_region_t * (* get_shape)        (GdkWindow       *window);
+  cairo_region_t * (* get_input_shape)  (GdkWindow       *window);
   void         (* shape_combine_region) (GdkWindow       *window,
                                          const cairo_region_t *shape_region,
                                          gint             offset_x,
index 4efe872fad559612b27f278a74acf0d7873f138d..42117ac5575327809063d76deb714d4c8addeadb 100644 (file)
@@ -2954,15 +2954,15 @@ _gdk_windowing_window_set_composited (GdkWindow *window, gboolean composited)
 {
 }
 
-cairo_region_t *
-_gdk_windowing_window_get_shape (GdkWindow *window)
+static cairo_region_t *
+gdk_quartz_window_get_shape (GdkWindow *window)
 {
   /* FIXME: implement */
   return NULL;
 }
 
-cairo_region_t *
-_gdk_windowing_window_get_input_shape (GdkWindow *window)
+static cairo_region_t *
+gdk_quartz_window_get_input_shape (GdkWindow *window)
 {
   /* FIXME: implement */
   return NULL;
@@ -2993,6 +2993,8 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
   iface->translate = _gdk_quartz_window_translate;
   iface->destroy = _gdk_quartz_window_destroy;
   iface->resize_cairo_surface = gdk_window_quartz_resize_cairo_surface;
+  iface->get_shape = gdk_quartz_window_get_shape;
+  iface->get_input_shape = gdk_quartz_window_get_input_shape;
 }
 
 
index 8b73ac2edb129df757a5d2435163a6638a8b8d39..ad291b24f47fdedce521918adfd0cec8b7e833af 100644 (file)
@@ -3170,8 +3170,8 @@ _gdk_windowing_window_set_composited (GdkWindow *window, gboolean composited)
 {
 }
 
-cairo_region_t *
-_gdk_windowing_window_get_shape (GdkWindow *window)
+static cairo_region_t *
+gdk_win32_window_get_shape (GdkWindow *window)
 {
   HRGN hrgn = CreateRectRgn (0, 0, 0, 0);
   int  type = GetWindowRgn (GDK_WINDOW_HWND (window), hrgn);
@@ -3187,8 +3187,8 @@ _gdk_windowing_window_get_shape (GdkWindow *window)
   return NULL;
 }
 
-cairo_region_t *
-_gdk_windowing_window_get_input_shape (GdkWindow *window)
+static cairo_region_t *
+_gdk_win32_window_get_input_shape (GdkWindow *window)
 {
   /* CHECK: are these really supposed to be the same? */
   return _gdk_windowing_window_get_shape (window);
@@ -3306,6 +3306,8 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
   iface->translate = _gdk_win32_window_translate;
   iface->destroy = _gdk_win32_window_destroy;
   iface->resize_cairo_surface = gdk_win32_window_resize_cairo_surface;
+  iface->get_shape = gdk_win32_window_get_shape;
+  iface->get_input_shape = gdk_win32_window_get_input_shape;
 }
 
 gboolean
index 052b012d4715d209df62d3ff07a139870cf011ce..d3c4a8ec2a42ad5c9abded848b8dc0523f783a2d 100644 (file)
@@ -4570,8 +4570,8 @@ _xwindow_get_shape (Display *xdisplay,
 }
 
 
-cairo_region_t *
-_gdk_windowing_window_get_shape (GdkWindow *window)
+static cairo_region_t *
+gdk_x11_window_get_shape (GdkWindow *window)
 {
   if (!GDK_WINDOW_DESTROYED (window) &&
       gdk_display_supports_shapes (GDK_WINDOW_DISPLAY (window)))
@@ -4581,8 +4581,8 @@ _gdk_windowing_window_get_shape (GdkWindow *window)
   return NULL;
 }
 
-cairo_region_t *
-_gdk_windowing_window_get_input_shape (GdkWindow *window)
+static cairo_region_t *
+gdk_x11_window_get_input_shape (GdkWindow *window)
 {
 #if defined(ShapeInput)
   if (!GDK_WINDOW_DESTROYED (window) &&
@@ -5589,5 +5589,7 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass)
   impl_class->translate = _gdk_x11_window_translate;
   impl_class->destroy = _gdk_x11_window_destroy;
   impl_class->resize_cairo_surface = gdk_window_x11_resize_cairo_surface;
+  impl_class->get_shape = gdk_x11_window_get_shape;
+  impl_class->get_input_shape = gdk_x11_window_get_input_shape;
 }